package spi;

import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.extension.Adaptive;
import org.apache.dubbo.common.extension.SPI;

/**
 * @Adaptive：在生成代理类时标注的方法会生成代理代码，代理代码会从url中获取key来判断使用哪个实现类示例
 *
 * @author 门那粒沙
 * @create 2020-08-09 9:45
 **/
@SPI("two")
public interface MySpi {
    void hello(String name);

    /**
     * 参数中带有URL的
     *
     * 拓展名获取策略优先顺序：URL中的参数param1->URL中的参数param2->@SPI指定的默认extName
     *
     * @param url
     * @return
     */
    @Adaptive({"param1", "param2"})
    String adaptiveOne(URL url);

    /**
     * 参数中带有方法并且方法返回值为URL的
     * @param myURL
     * @return
     */
    @Adaptive({"param1", "param2"})
    String adaptiveTwo(MyURL myURL);

}
